/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package vista;

import clases.Almacen;
import clases.AlmacenArticulo;
import clases.Articulo;
import com.alee.laf.button.WebButton;
import com.alee.laf.optionpane.WebOptionPane;
import com.alee.laf.panel.WebPanel;
import com.alee.laf.rootpane.WebDialog;
import com.alee.laf.scroll.WebScrollPane;
import com.alee.laf.table.WebTable;
import com.alee.laf.text.WebTextField;
import controlador.CtrlArticulo;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ListSelectionModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author togapaulo
 */
public class FrmBusquedaArticulo extends WebDialog implements ActionListener{

    private WebTextField txtBusqueda;
    private WebTable tblArticulos;
    private WebButton btnAceptar;
    
    private Almacen almacen;
    
    private CtrlArticulo ctrlArticulo;
    private FrmMovimiento owner;
    
    FrmBusquedaArticulo(FrmMovimiento owner, String busqueda, Almacen almacen){
        setTitle("Artículos");
        setDefaultCloseOperation(WebDialog.DISPOSE_ON_CLOSE);
        setSize(400, 600);
        setShowResizeCorner(false);
        setShowMaximizeButton(false);
        initComponents(owner, busqueda, almacen);
        setLocationRelativeTo(null);
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == this.btnAceptar) {
            try {
                int row = this.tblArticulos.getSelectedRow();
                Articulo articulo = this.ctrlArticulo.get((int) this.tblArticulos.getModel().getValueAt(row, 0), null);
                int stock = this.ctrlArticulo.getArticuloStock(articulo.getIdArticulo(), this.almacen.getIdAlmacen(), null);
                System.out.println("Articulo:" + articulo.getNombre());
                if (stock != 0) {
                    this.owner.setTextArticulo(articulo.getNombre());
                    this.owner.setModelCantidad(new SpinnerNumberModel(1, 1, stock, 1));
                    this.dispose();
                } else{
                    WebOptionPane.showMessageDialog(
                            this,
                            "No hay stock para descargar",
                            "Error",
                            WebOptionPane.ERROR_MESSAGE
                    );
                }
            } catch (ClassNotFoundException | SQLException ex) {
                Logger.getLogger(FrmBusquedaArticulo.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    private void initComponents(FrmMovimiento owner, String busqueda, Almacen almacen) {
        this.almacen = almacen;
        this.owner = owner;
        this.txtBusqueda = new WebTextField(15);
        this.txtBusqueda.setText(busqueda);
        this.tblArticulos = new WebTable();
        this.btnAceptar = new WebButton("Aceptar");
        this.btnAceptar.addActionListener(this);
        add(new WebPanel(){
            {
                setLayout(new BorderLayout());
                add(txtBusqueda, BorderLayout.NORTH);
                add(
                        new WebScrollPane(tblArticulos){
                            {
                                this.setMinimumHeight(200);
                            }
                        }
                        , BorderLayout.CENTER);
                add(btnAceptar, BorderLayout.SOUTH);
            }
        });
        this.llenarTabla(busqueda, this.almacen);
        this.pack();
        this.txtBusqueda.addActionListener((ActionEvent e) -> {
            this.llenarTabla(this.txtBusqueda.getText(), this.almacen);
        });
    }
    
    private void llenarTabla(String busqueda, Almacen almacen){
        try {
            //int i = 0;
            if (almacen != null) {
                System.out.println(almacen.getNombre());
                ArrayList<AlmacenArticulo> stocks;
                this.ctrlArticulo = new CtrlArticulo();
                //Filtrar por busqueda
                /*ArrayList<Articulo> articulos = this.ctrlArticulo.getArticulos_almacen(almacen.getIdAlmacen(), busqueda, null);
                stocks = this.ctrlArticulo.getStocks_almacen(almacen.getIdAlmacen(), null);*/
                ArrayList<Object[]> artStocks = this.ctrlArticulo.getArticulosStock_almacen(almacen.getIdAlmacen(), busqueda, null);
                DefaultTableModel model = new DefaultTableModel();
                this.tblArticulos.setModel(model);
                model.addColumn("idArticulo");
                model.addColumn("Nombre");
                model.addColumn("Stock");
                for(Object[] artStock : artStocks){
                    model.addRow(artStock);
                }
                this.tblArticulos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                this.tblArticulos.removeColumn(this.tblArticulos.getColumnModel().getColumn(0));
                //Te faltó comentar esto: Utilidades.alinearColumna_derecha(tblArticulos, "Precio");
                Utilidades.resizeColumnWidth(tblArticulos);
                this.tblArticulos.setEditable(false);
            }
            else{
                this.ctrlArticulo = new CtrlArticulo();
                ArrayList<Articulo> articulos = this.ctrlArticulo.getArticulos(busqueda, null);
                DefaultTableModel model = new DefaultTableModel();
                this.tblArticulos.setModel(model);
                model.addColumn("idArticulo");
                model.addColumn("Nombre");
                articulos.stream().forEach((articulo) -> {
                    model.addRow(new Object[]{
                        articulo.getIdArticulo(),
                        articulo.getNombre(),
                    });
                });
                this.tblArticulos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                //this.tblArticulos.removeColumn(this.tblArticulos.getColumnModel().getColumn(0));
                //Te faltó comentar esto: Utilidades.alinearColumna_derecha(tblArticulos, "Precio");
                Utilidades.resizeColumnWidth(tblArticulos);
                this.tblArticulos.setEditable(false);
            }
        } catch (SQLException | ClassNotFoundException ex) {
            Logger.getLogger(FrmBusquedaArticulo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
}